package com.example.forum.utils;

import com.example.forum.model.Message;
import com.example.forum.model.User;
import com.example.forum.services.IMessageService;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;

/**
 * 消息工具类，用于发送各种系统消息
 */
@Component
public class MessageUtils {

    @Resource
    private IMessageService messageService;
    
    /**
     * 发送点赞通知
     * @param fromUser 点赞的用户
     * @param toUserId 被点赞内容的作者ID
     * @param articleId 被点赞的文章ID
     * @param articleTitle 被点赞的文章标题
     */
    public void sendLikeMessage(User fromUser, Long toUserId, Long articleId, String articleTitle) {
        if (fromUser.getId().equals(toUserId)) {
            // 不发送给自己的通知
            return;
        }
        
        String content = String.format("用户 %s 点赞了您的文章《%s》", 
                fromUser.getNickname() != null ? fromUser.getNickname() : fromUser.getUsername(),
                articleTitle);
        
        Message message = new Message();
        message.setContent(content);
        message.setPostUserId(fromUser.getId());
        message.setReceiveUserId(toUserId);
        message.setType("like");
        message.setState((byte) 0); // 未读状态
        message.setCreateTime(new Date());
        message.setUpdateTime(new Date());
        message.setDeleteState((byte) 0);
        
        messageService.create(message);
    }
    
    /**
     * 发送评论通知
     * @param fromUser 评论的用户
     * @param toUserId 被评论内容的作者ID
     * @param articleId 被评论的文章ID
     * @param articleTitle 被评论的文章标题
     * @param commentContent 评论内容
     */
    public void sendCommentMessage(User fromUser, Long toUserId, Long articleId, String articleTitle, String commentContent) {
        if (fromUser.getId().equals(toUserId)) {
            // 不发送给自己的通知
            return;
        }
        
        // 截断评论内容，避免过长
        String shortComment = commentContent;
        if (shortComment.length() > 50) {
            shortComment = shortComment.substring(0, 47) + "...";
        }
        
        String content = String.format("用户 %s 评论了您的文章《%s》：%s", 
                fromUser.getNickname() != null ? fromUser.getNickname() : fromUser.getUsername(),
                articleTitle,
                shortComment);
        
        Message message = new Message();
        message.setContent(content);
        message.setPostUserId(fromUser.getId());
        message.setReceiveUserId(toUserId);
        message.setType("comment");
        message.setState((byte) 0); // 未读状态
        message.setCreateTime(new Date());
        message.setUpdateTime(new Date());
        message.setDeleteState((byte) 0);
        
        messageService.create(message);
    }
    
    /**
     * 发送系统通知
     * @param toUserId 接收通知的用户ID
     * @param content 通知内容
     */
    public void sendSystemMessage(Long toUserId, String content) {
        Message message = new Message();
        message.setContent(content);
        message.setPostUserId(0L); // 系统发送，用0表示
        message.setReceiveUserId(toUserId);
        message.setType("system");
        message.setState((byte) 0); // 未读状态
        message.setCreateTime(new Date());
        message.setUpdateTime(new Date());
        message.setDeleteState((byte) 0);
        
        messageService.create(message);
    }
} 